package com.zem.imos.Controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zem.imos.Entity.*;
import com.zem.imos.Entity.Params.ParamsDoctor;
import com.zem.imos.Entity.Params.ParamsPatient;
import com.zem.imos.Entity.Params.ParamsSchedule;
import com.zem.imos.Service.AdminService;
import com.zem.imos.Service.DrugsService;
import com.zem.imos.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

@RestController
public class AdminController {


    @Autowired
    private AdminService adminService;
    @Autowired
    private DrugsService drugsService;


    /**
     * 管理员获取医生列表
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析role为管理员，获取医生列表
     * 测试
     * @test ZSQ
     */
    @GetMapping("/getworkersbyadmin")
    public RespEntity getworkersbyadmin (HttpServletRequest request, Integer page, Integer limit){
        Page respage = new Page(page,limit);
        return adminService.getworkersbyadmin(request,respage);
    }

    @PostMapping("/getdoctor")
    public RespEntity getdoctor (HttpServletRequest request, Integer page, Integer limit, ParamsDoctor paramsDoctor){
        Page respage = new Page(page,limit);
        return adminService.getdotor(request,respage,paramsDoctor);
    }


    /**
     * 管理员添加医生账号
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析role为管理员，添加医生账号
     * 测试
     * @test ZSQ
     */
    @PostMapping("/addworkersbyadmin")
    public RespEntity addworkersbyadmin (HttpServletRequest request, ParamsDoctor paramsDoctor){
        return adminService.addworkersbyadmin(request, paramsDoctor);
    }

    /**
     * 管理员删除医生账号
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析role为管理员，删除医生账号
     * 测试
     * @test 要不要验证id身份，现在可以删除所有id
     * @res 后续可以验证删除的id是否是医生
     */
    @PostMapping("/deleteworkersbyadmin")
    public RespEntity deleteworkersbyadmin (HttpServletRequest request, Long id){
        return adminService.deleteworkersbyadmin(request, id);
    }
    /**
     * 管理员更新医生账号
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析role为管理员，更新医生账号
     * 未测试
     * @test 返回更新成功，实际未更新
     * @res 已修复
     */
    @PostMapping("/updateworkersbyadmin")
    public RespEntity updateworkersbyadmin (HttpServletRequest request, ParamsDoctor paramsDoctor){
        return adminService.updateworkersbyadmin(request, paramsDoctor);
    }

    /**
     * 药品管理员增加新的药品
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析验证为药剂科医生，输入药品参数，必选项为drugName，增加药品种类，id自动生成
     * 测试
     * @test ZSQ 测试接口要输入drugName而不是drug_name
     */
    @PostMapping("/adddrugsbyadmin")
    public RespEntity adddrugsbyadmin (HttpServletRequest request, Drug drugs){
        return drugsService.adddrugsbyadmin(request, drugs);
    }
    /**
     * 药品管理员删除药品
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析验证为药剂科医生，输入药品id，删除药品，修改isdeleted为1
     * 测试
     * @test ZSQ
     */
    @PostMapping("/deletedrugsbyadmin")
    public RespEntity deletedrugsbyadmin (HttpServletRequest request,Long id){
        return drugsService.deletedrugsbyadmin(request, id);
    }

    /**
     * 药品管理员更新药品
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析role为管理员，更新药品
     * 未测试
     * @test 返回更新成功，但实际未更新
     */
    @PostMapping("/updatedrugsbyadmin")
    public RespEntity updatedrugsbyadmin (HttpServletRequest request, Drug drugs){
        return drugsService.updatedrugsbyadmin(request, drugs);
    }
    /**
     * 药品管理员查找药品(通过name模糊查找)
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析验证为药剂科医生，输入药品名字，模糊查询
     * 测试
     * @test ZSQ
     */
    @PostMapping("/selectdrugsbyadmin")
    public RespEntity selectdrugsbyadmin (HttpServletRequest request,Integer page, Integer limit, String drug_name){
        Page respage = new Page(page,limit);
        return drugsService.selectdrugsbyadmin(request, respage,drug_name);
    }

    /**
     * 管理员删除患者
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析role为管理员，删除患者
     * 未测试
     * @test 要不要验证id身份，现在可以删除所有id
     */
    @PostMapping("/deleteuserbyadmin")
    public RespEntity deleteuserbyadmin (HttpServletRequest request, Long id){
        return adminService.deleteuserbyadmin(request, id);
    }

    /**
     * 管理员批量删除患者
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析role为管理员，批量删除患者
     * 未测试
     * @test 怎么输入
     */
    @PostMapping("/deleteuserbyadminbybatches")
    public RespEntity  deleteuserbyadminbybatches (HttpServletRequest request, @RequestBody List<Long> userlist){
        return adminService.deleteuserbyadminbybatches(request, userlist);
    }


    /**
     * 管理员更新用户密码
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析role为管理员，重置用户的密码
     * 未测试
     * @test 输入id怎么更改密码
     */
    @PostMapping("/updateuserbyadmin")
    public RespEntity updateuserbyadmin (HttpServletRequest request,Long id){
        return adminService.updateuserbyadmin(request, id);
    }

    /**
     * 管理员获取用户信息（带筛选的）
     * @author ZEM
     * @Time 2021/11/30
     * @Description 通过token解析role为管理员，name，gender为模糊查询，username为精准查询
     * 测试
     * @test ZSQ
     */
    @PostMapping("/getuserbyadmin")
    public RespEntity getuserbyadmin (HttpServletRequest request, Integer page, Integer limit, ParamsPatient paramsPatient){
        Page respage = new Page(page,limit);
        return adminService.getuserbyadmin(request, respage ,paramsPatient);
    }

    /**
     * 获取管理员信息
     * @author ZEM
     * @Time 2021/11/30
     * @Description 获取管理员信息
     * 未测试
     * @test 没找到对应的测试接口
     */
    @GetMapping("/getadmininfo")
    public RespEntity getadmininfo (HttpServletRequest request){
        return adminService.getadmininfo(request);
    }

    /**
     * 管理员排班
     * @author ZEM
     * @Time 2021/12/02
     * @Description 管理员排班
     */
    @PostMapping("/addschedule")
    public RespEntity addschedule (HttpServletRequest request, ParamsSchedule paramsSchedule) {
        return adminService.addSchedule(request,paramsSchedule);
    }

    /**
     * 管理员获取排班信息
     * @author ZEM
     * @Time 2021/12/02
     * @Description 管理员获取排班信息
     */
    @PostMapping("/selectschedule")
    public RespEntity selectSchedule (HttpServletRequest request, Long date, Long subDepartmentId) {
        return adminService.selectSchedule(request,date,subDepartmentId);
    }

    /**
     * 管理员删除排班信息
     * @author ZEM
     * @Time 2021/12/02
     * @Description 管理员删除排班信息
     */
    @PostMapping("/deleteschedule")
    public RespEntity deleteSchedule (HttpServletRequest request, Long id) {
        return adminService.deleteSchedule(request,id);
    }



}
